package Utils.Ficheros;

import Controlador.Controlador;
import Vista.Inicio;
import java.io.IOException;
import java.io.InputStream;

/**
 * Clase que almacena la informacion que se extrae de un tracklog.
 * @author Doria
 */
public class FicheroDatos {

    private double latitud;
    private double longitud;
    private double altitud;
    private boolean continuidad;
    private String fecha;
    private String hora;

    public FicheroDatos() {
        //Coordenadas de la Facultad de Informática (UCM)
        latitud = 40.45308229400343;
        longitud = -3.734149932861328;
        altitud = 22;
    }

    public FicheroDatos(double lat, double longi) {
        this.latitud = lat;
        this.longitud = longi;
        this.altitud = 22;
        this.continuidad = true;
        this.fecha = "";
        this.hora = "";
    }

    public void clone(FicheroDatos infoLinea) {
        this.latitud = infoLinea.getLatitud();
        this.longitud = infoLinea.getLongitud();
        this.altitud = infoLinea.getAltitud();
        this.continuidad = infoLinea.getContinuidad();
        this.fecha = infoLinea.getFecha();
        this.hora = infoLinea.getHora();
    }

    /**
     * Metodo que obtiene los parametros de coordenadas del fichero seleccionado
     * @param log objeto tipo InputStream que contiene un fichero de texto
     * @return datos de coordenadas de cada linea (latitud, longitud, altitud,
     *         hora, fecha)
     */
    public void lecturaFichero(InputStream log) {
        int contador = 0;
        try {
            StringBuffer buffer = new StringBuffer();
            int c = log.read();

            while ((c != '\n') && (c != -1)) {
                char ch = (char) c;
                if (ch == ',') {
                    switch (contador) {
                        case 0:
                            latitud = Double.valueOf(buffer.toString()).doubleValue();
                            buffer.delete(0, buffer.length());
                            contador++;
                            break;
                        case 1:
                            longitud = Double.valueOf(buffer.toString()).doubleValue();
                            buffer.delete(0, buffer.length());
                            contador++;
                            break;
                        case 2:
                            altitud = Double.valueOf(buffer.toString()).doubleValue();
                            buffer.delete(0, buffer.length());
                            contador++;
                            break;
                        case 3:
                            int cont;
                            cont = Integer.valueOf(buffer.toString()).intValue();
                            if (cont == 0) {
                                this.continuidad = true;
                            } else {
                                this.continuidad = false;
                            }
                            buffer.delete(0, buffer.length());
                            contador++;
                            break;
                        case 4:
                            buffer.delete(0, buffer.length());
                            contador++;
                            break;
                        case 5:
                            fecha = "";
                            fecha = buffer.toString();
                            buffer.delete(0, buffer.length());
                            contador++;
                            break;
                        default:
                            break;
                    }
                } else {
                    if (ch != ' ') {
                        buffer.append(ch);
                    }
                }
                c = log.read();
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        if (contador != 6) {
            setNull();
        }
    }

    public double getLatitud() {
        return latitud;
    }

    public double getAltitud() {
        return 300;
        //return altitud;
    }

    public double getLongitud() {
        return longitud;
    }

    public boolean getContinuidad() {
        return continuidad;
    }

    public String getFecha() {
        return fecha;
    }

    public String getHora() {
        return hora;
    }

    public void setLatitud(double l) {
        this.latitud = l;
    }

    public void setLongitud(double l) {
        this.longitud = l;
    }

    public void setAltitud(double l) {
        this.altitud = l;
    }

    public void setContinuidad(boolean c) {
        this.continuidad = c;
    }

    public void setFecha(String f) {
        this.fecha = f;
    }

    public void setHora(String h) {
        this.hora = h;
    }

    private void setNull() {
        longitud = -1;
        latitud = -1;
        altitud = -1;
        continuidad = false;
        fecha = "";
        hora = "";
    }

    private boolean isNull() {
        if ((longitud == -1) && (latitud == -1) && (altitud == -1)) {
            return true;
        } else {
            return false;
        }
    }
}
